(function () {
	var userNow = $("#user_now").text();
	moment.locale("zh-cn");
	/**
	 * 删除数组中第一个匹配的元素
	 * @param element 需要进行匹配的元素
	 * @returns {boolean} 成功返回true, 未找到匹配元素返回false
	 */
	Array.prototype.remove = function(element) {
		for(var index in this) {
			if(_.isEqual(element, this[index])){
				this.splice(index, 1);
				return true;
			}
		}
		return false;
	};
	var vm = new Vue({
		el: "body",
		data: {
			users: [],
			selectedUsers: [],
			message: null,
			history_msg: [] //历史消息
		},
		methods: {
			/**
			 * 选择用户, 如果目标用户在已选择列表中已存在则移除
			 * 不存在则加入
			 */
			chooseUser: function (user) {
				for (index in this.selectedUsers) {
					if (_.isEqual(this.selectedUsers[index], user)) {
						//如果该用户已被选中, 则不进行任何操作
						return;
					}
				}
				this.selectedUsers.push(user);
			},
			/**
			 * 移除已选择的用户
			 */
			removeTarget : function(user) {
				this.selectedUsers.remove(user);
			},
			/**
			 * 向服务端发送消息
			 */
			sendMessage: function () {
				if(this.selectedUsers.length == 0) {
					alert("请选择发送消息目标!");
					return;
				}
				if(!this.message) {
					alert("请输入消息内容!");
					return;
				}
				var msg = {
					clientType: 1,
					userNow: userNow,
					target: this.selectedUsers,
					content: this.message
				};
				ws.send(JSON.stringify(msg));
				this.history_msg.push({
					receive : false,
					from: "我",
					content: this.message,
					time: new Date(),
					to : _.clone(this.selectedUsers)
				});
				this.message = null;
			},
			logout : function(){
				ws.send(JSON.stringify({
					clientType : 2,
					userNow : userNow
				}));
				location.pathname = "/logout";
			},
			/**
			 * 日期时间格式化
			 */
			formatDate : function(date) {
				return moment(date).format("LLL");
			}
		}
	});

	var ws = new WebSocket("ws://"+location.hostname+":7002/");
	ws.onopen = function () {
		var init = {
			clientType: 0,
			userNow: userNow
		};
		ws.send(JSON.stringify(init));
	};
	/*
	 * 服务端消息(serverType)类型
	 * 0 - 用户列表 {users : [user1,user2...]}
	 * 1 - 普通消息 {content : "xxx", from : "userXX"}
	 * 2 - 用户上线 {user : userXXX}
	 * 3 - 用户下线 {user : userXXX}
	 * */

	ws.onmessage = function (event) {
		var msg = JSON.parse(event.data);
		switch (msg.serverType) {
			case 0 :
				vm.$data.users = msg.users;
				break;
			case 1 :
				vm.$data.history_msg.push({
					receive : true,
					from: msg.from,
					content: msg.content,
					time: new Date()
				});
				break;
			case 2 :
				vm.$data.users.push(msg.user);
				break;
			case 3 :
				vm.$data.users.remove(msg.user);
				break;
		}
	}

})();